近日, 我改寫了一個以前寫的SQL預存程序,
準備加上自行紀錄Log的功能 (判斷insert 或 update是否成功, 然後在放log的 table裡 insert 1筆新的log)
可是
因為這隻SQL預存程序
裡頭寫了一堆 if 以及有用到一些 select 在insert 或 update之前
所以
當我把
if (@@ROWCOUNT > 0)
begin
-- insert log的相關語法
end
放在該SQL預存程序最後的 end 之前時
竟然只有最後1個 if 區塊內的 insert 或 update 才抓得到 @@ROWCOUNT ?
這個問題發生在 SQL Server 2005 Express
於是
只好多加1個變數
DECLARE @IsOutLog AS int;
set @IsOutLog = 0;
並在每一個 insert 或 update 之後, 都加上
if (@@ROWCOUNT > 0)
set @IsOutLog = 1;
以保留做為判斷是否寫log的依據
這樣才終於使SQL預存程序達到預期的效果
謎啊?
明明我是用一堆if 區塊去做 功能區分的
在 insert 或 update 之後, 就沒有再做任何的 select 或 insert 或 update
為何 @@ROWCOUNT 的值還會被影響到?
otis提到:
@@ROWCOUNT
這個在 insert 或 update 之後
應該是計算出受影響的資料筆數
所以原本的作用是判斷資料是否正常插入或更新
可是在SQL預存程序裡
不知道是不是受到 if 區塊的影響 ( begin 與 end )
導致這個@@ROWCOUNT 的值?